// 导入错误处理
const { handleError } = require('./handleError.js')
Page({
  data: {
    // 身份证警告信息
    warnInfo:null,
    fileID:null,
    userInfo:null,
    // 是否同意保存
    isAgree:false,
  },
  // main
  handleAdd(){
    this.getUserPhoto()
      .then(res=>{
        // 初始化 userInfo
        this.setData({ userInfo : null, isAgree : false})
        // 弹窗
        wx._personal.showLoading('验证中')
        // res.tempFilePaths[0] 是照片的wxurl
        return this.savePhoto(res.tempFilePaths[0])
      })
      .then(res=>{
        // res.fileID 是照片的fileID

        // 把fileID保存在页面变量中
        this.setData({ fileID: res.fileID})

        return this.getUrl(res.fileID)
      })
      .then(res => {
        // res.fileList[0].tempFileURL 是照片的临时url
        // 错误处理
        if (res.fileList[0].status != 0){
          throw wx._personal.Error(res, "换取临时url失败", 0)
        }
        return this.callTXCloud(res.fileList[0].tempFileURL)
      })
      .then(res=>{
        // res.result.AdvancedInfo.WarnInfos警告数组
        // res.result是一个对象里面有身份信息
        // 处理腾讯云返回过来的警告
        this.handleIDCardWarn(res.result.AdvancedInfo.WarnInfos)
        
        // 处理返回成功但是没有信息的情况
        // "" == false 返回true
        if (!res.result.Name){
          // 取消弹窗
          wx.hideLoading()
          // 弹出错误弹窗
          wx._personal.showErrToast('图片不正确')
          throw wx._personal.Error(res, "腾讯云回调resolve,但是没有身份信息", 2)
          // 如果throw 下面的保存信息就不执行了
        }
        // 先将身份信息保存在页面data中
        let userInfo = {
          type: "IDCard",
          name: res.result.Name,
          sex: res.result.Sex,
          nation: res.result.Nation,
          birth: res.result.Birth,
          address: res.result.Address,
          idNum: res.result.IdNum,
          fileID: this.data.fileID,
          openid:wx._personal.openid,
        }
        this.setData({
          userInfo
        })
        // 取消弹窗
        wx.hideLoading()
      })
      .catch(res => {
        // 取消弹窗
        wx.hideLoading()
        // 错误处理
        handleError(res,wx,this)
      })
  },
  handleSave(){
    this.setData({ isAgree : true })
    this.saveIDCardData()
      .then(res=>{
        // 取消弹窗
        wx.hideLoading()
        // 提示用户保存成功
        wx._personal.showToast('保存成功')
        console.log(res)
      })
      .catch(res=>{
        // 取消弹窗
        wx.hideLoading()
        // 提示保存失败
        wx._personal.showErrToast('保存失败')
        console.log(res)
      })
  },
  // 生命周期
  onUnload(){
    // 如果用户没有点击保存就删除云存储的照片
    if(!this.data.isAgree && this.data.fileID){
      wx.cloud.deleteFile({
        fileList: [this.data.fileID]
      }).then(res => {
        console.log("未保存照片已删除")
      }).catch(res => {
        throw wx._personal.Error(res, "未保存照片删除失败", 0)
      })
    }
  },
  // ========main1======
  // ========1=======
  // 获取用户身份证照片
  getUserPhoto(){
    return new Promise((resolve,reject)=>{
      wx.chooseImage({
        count: 1,
        success: resolve,
        fail: (res)=>{
          reject(wx._personal.Error(res, "用户没有上传照片", -1))
         
        }
      })
    })
  },
  // ========2=======
  // 根据wxurl保存照片到云存储
  savePhoto(filePath){
    // 判断openid是否存在 openid默认值为null
    if (wx._personal.openid == null){
      return Promise.reject({msg:"openid获取失败"})
    }
    // 照片命名格式:openid_时间戳
    const openid = `${wx._personal.openid}`
    const filename = `${openid}_${Date.now()}`
    return wx.cloud.uploadFile({
      cloudPath: `cardbag/chache/${filename}`,
      filePath
    })
  },
  // ========3=======
  // 根据fileID换取临时链接
  getUrl(fileID){
    return wx.cloud.getTempFileURL({
      fileList: [fileID]
    })
  },
  // ========4=======
  // 根据把临时链接发送给腾讯云服务器验证
  callTXCloud(url){
    return wx.cloud.callFunction({
      name:"callTXCloudIDCard",
      data:{
        url,
        secretId:wx._personal.secretId,
        secretKey:wx._personal.secretKey,
      }
    })
  },
  // ========5=======
  // 腾讯云回调警告处理
  handleIDCardWarn(list){
    const warnCode = {
      "-9100":'身份证有效日期不合法告警',
      "-9101":"身份证边框不完整告警",
      "-9102":"身份证复印件告警",
      "-9103":"身份证翻拍告警",
      "-9105":"身份证框内遮挡告警",
      "-9104":"临时身份证告警",
      "-9106":"身份证 PS 告警",
    }
    let warnInfo = list.map( e =>{
      return warnCode[e]
    })
    this.setData({
      warnInfo
    })
  },
  // ========main2======
  // ========6=======
  // 把身份证信息存储到数据库里
  saveIDCardData(){
    // 弹窗
    wx._personal.showLoading('保存信息中')
    return wx.cloud.callFunction({
      name:"saveIDCardData",
      data:{
        data:this.data.userInfo
      }
    })
    // return wx.cloud.database().collection('cardbag').add({
    //   data: this.data.userInfo
    // })
  },
  // ========main3======
  // 展示图片
  showImg(event){
    wx.previewImage({
      urls: [event.currentTarget.dataset.url]
    })
  },
  
})